const Joi = require('joi');

const createProject = Joi.object({
  name: Joi.string().trim().min(1).max(200).required(),
  protocolNumber: Joi.string().trim().required(),
  version: Joi.string().trim().optional(),
  versionDate: Joi.date().required(),
  status: Joi.string().valid('active', 'completed', 'paused').optional(),
  description: Joi.string().trim().max(1000).allow(''),
  sections: Joi.array().items(
    Joi.string().hex().length(24)
  ),
  isTemplate: Joi.boolean().default(false),
  configSections: Joi.array().items(
    Joi.object({
      sectionId: Joi.string().required(),
      order: Joi.number().integer().min(1).required(),
      config: Joi.object().optional()
    })
  ).optional(),
  template: Joi.object().optional(),
  frontMatter: Joi.array().items(
    Joi.object({
      formId: Joi.string().required(),
      order: Joi.number().integer().min(0).optional(),
      showInToc: Joi.boolean().optional(),
      tocLevel: Joi.number().valid(1,2).optional(),
      customTitle: Joi.string().trim().max(200).allow(''),
      pageBreakAfter: Joi.boolean().optional(),
      hideFormTitle: Joi.boolean().optional()
    })
  ).optional(),
  config: Joi.object({
    documentTitle: Joi.string().trim().allow(''),
    watermark: Joi.string().trim().allow(''),
    pageSettings: Joi.object({
      size: Joi.string().valid('A4', 'A3', 'Letter'),
      orientation: Joi.string().valid('portrait', 'landscape'),
      margins: Joi.object({
        top: Joi.number().min(0),
        bottom: Joi.number().min(0),
        left: Joi.number().min(0),
        right: Joi.number().min(0)
      })
    })
  }).optional()
});

const updateProject = createProject.fork(['name', 'protocolNumber', 'versionDate'], (schema) => schema.optional());

module.exports = {
  createProject,
  updateProject
};